﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace iNet
{
	/// <summary>
	/// 提供資料相關事件的資料。
	/// </summary>
	/// <typeparam name="TData">相關資料型別。</typeparam>
	public class DataEventArgs<TData> : EventArgs
	{
		#region 欄位
		TData _Data;
		#endregion
		#region 建構子
		/// <summary>
		/// 初始化新的 DataEventArgs 執行個體。
		/// </summary>
		/// <param name="data">事件相關的資料。</param>
		public DataEventArgs(TData data)
		{
			_Data = data;
		}
		#endregion
		#region Data
		/// <summary>
		/// 取得與事件相關的資料。
		/// </summary>
		public TData Data
		{
			get
			{
				return _Data;
			}
		}
		#endregion
	}
	/// <summary>
	/// 提供資料相關事件的資料。
	/// </summary>
	/// <typeparam name="TData1">第一個相關資料型別。</typeparam>
	/// <typeparam name="TData2">第二個相關資料型別。</typeparam>
	public class DataEventArgs<TData1, TData2> : EventArgs
	{
		#region 欄位
		TData1 _Data1;
		TData2 _Data2;
		#endregion
		#region 建構子
		/// <summary>
		/// 初始化新的 DataEventArgs 執行個體。
		/// </summary>
		/// <param name="data1">第一個與事件相關的資料。</param>
		/// <param name="data2">第二個與事件相關的資料。</param>
		public DataEventArgs(TData1 data1, TData2 data2)
		{
			_Data1 = data1;
			_Data2 = data2;
		}
		#endregion
		#region Data1
		/// <summary>
		/// 取得第一個與事件相關的資料。
		/// </summary>
		public TData1 Data1
		{
			get
			{
				return _Data1;
			}
		}
		#endregion
		#region Data2
		/// <summary>
		/// 取得第二個與事件相關的資料。
		/// </summary>
		public TData2 Data2
		{
			get
			{
				return _Data2;
			}
		}
		#endregion
	}
	/// <summary>
	/// 提供資料相關事件的資料。
	/// </summary>
	/// <typeparam name="TData1">第一個相關資料型別。</typeparam>
	/// <typeparam name="TData2">第二個相關資料型別。</typeparam>
	/// <typeparam name="TData3">第三個相關資料型別。</typeparam>
	public class DataEventArgs<TData1, TData2, TData3> : DataEventArgs<TData1, TData2>
	{
		#region 欄位
		TData3 _Data3;
		#endregion
		#region 建構子
		/// <summary>
		/// 初始化新的 DataEventArgs 執行個體。
		/// </summary>
		/// <param name="data1">第一個與事件相關的資料。</param>
		/// <param name="data2">第二個與事件相關的資料。</param>
		/// <param name="data3">第三個與事件相關的資料。</param>
		public DataEventArgs(TData1 data1, TData2 data2, TData3 data3)
			: base(data1, data2)
		{
			_Data3 = data3;
		}
		#endregion
		#region Data3
		/// <summary>
		/// 取得第三個與事件相關的資料。
		/// </summary>
		public TData3 Data3
		{
			get
			{
				return _Data3;
			}
		}
		#endregion
	}
}
